package com.tywj.panda.customer.common.tool

import com.tywj.panda.customer.common.R
import com.tywj.panda.customer.common.api.CommonApi
import com.tywj.panda.customer.common.entity.UploadFileEntity
import com.tywj.panda.customer.common.http.PDObjectCallback
import com.tywj.lib.core.common.util.BitmapUtil
import com.tywj.lib.core.common.util.LogUtil
import com.tywj.lib.core.common.util.ResourcesUtil
import java.io.File


/**
 * <pre>
 *     author : June Yang
 *     time   : 2020/06/02
 *     desc   : 文件上传工具类
 *     version: 2.0.0
 * </pre>
 */
object UpLOadFileTool {
    // 证件管理
    const val TYPE_CERT = "certificate"
    // 用户头像
    const val TYPE_PORTRAIT = "portrait"


    /**
     * 上传图片
     * @param type 图片类型，取值[TYPE_CERT]、[TYPE_PORTRAIT]
     * @param file 图片文件
     * @param successAction 上传成功回调，url：文件地址
     * @param errorAction 上传失败回调，msg：错误信息
     */
    fun uploadImage(type: String, file: File, successAction: (url: String) -> Unit, errorAction: (msg: String) -> Unit) {
        BitmapUtil.compressToFile(file.absolutePath, {
            uploadFile(type, it, successAction, errorAction)
        }, {
            // 压缩图片失败
            LogUtil.printStackTrace(it)
            errorAction.invoke(ResourcesUtil.getString(R.string.common_upload_compress_image_fail))
        })
    }

    /**
     * 上传文件
     * @param type 文件类型
     * @param file 图片文件
     * @param successAction 上传成功回调，url：文件地址
     * @param errorAction 上传失败回调，msg：错误信息
     */
    private fun uploadFile(type: String, file: File, successAction: (url: String) -> Unit, errorAction: (msg: String) -> Unit) {
        CommonApi.uploadFile(type, file)
            .execute(object : PDObjectCallback<UploadFileEntity>(UploadFileEntity::class.java) {
                override fun success(data: UploadFileEntity) {
                    successAction.invoke(data.fileUrl)
                }

                override fun error(code: Int, message: String) {
                    super.error(code, message)

                    errorAction.invoke(ResourcesUtil.getString(R.string.common_upload_error))
                }
            })
    }


}